package co.edu.uniquindio.ejb;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

import co.edu.uniquindio.dao.AutomovilDao;
import co.edu.uniquindio.dao.ColorDao;
import co.edu.uniquindio.dao.MarcaDao;
import co.edu.uniquindio.dao.ModeloDao;
import co.edu.uniquindio.dao.MotorDao;
import co.edu.uniquindio.dao.VendedorDao;
import co.edu.uniquindio.ejbremotos.AutomovilEjbRemote;
import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Vendedor;

/**
 *  Session Bean implementation class AutomovilEjb
 * El proposito de esta clase es el proveer las funcionalidades
 * del aplicativo referentes a un automovil a las cuales tienen
 * acceso los usuarios ocultando la capa del nivel de persistencia 
 * del funcionamiento del aplicativo.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class AutomovilEjb implements AutomovilEjbRemote {

	/**
	 * este atributo es un instancia de la clase VendedorDao
	 */
	@EJB
	private VendedorDao vendedorDao;
	/**
	 * este atributo es un instancia de la clase AutomovilDao
	 */
	@EJB
	private AutomovilDao automovilDao;
	/**
	 * este atributo es un instancia de la clase ColorDao
	 */
	@EJB
	private ColorDao colorDao;
	/**
	 * este atributo es un instancia de la clase MarcaDao
	 */
	@EJB
	private MarcaDao  marcaDao;
	/**
	 * este atributo es un instancia de la clase MotorDao
	 */
	@EJB
	private MotorDao motorDao;
	/**
	 * este atributo es un instancia de la clase ModeloDao
	 */
	@EJB
	private ModeloDao modeloDao;
	/**
	 * Este es el constructor por defecto de la clase AutomovilEjb. 
	 */
	public AutomovilEjb() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * este metodo me permitira obtener todos los datos de un automovil
	 * @return el automovil
	 */
	public String descripcion(String llave)
	{
		Automovil auto =automovilDao.findByKey(llave);
		return auto.toString();
	}
	/**
	 * este metodo me permite agregar un automovil
	 * @param automovil
	 * @throws Exception
	 */
	public void registrarAutomovil(Automovil automovil) throws Exception
	{
		if(automovil.getColor()!=null && automovil.getModelo()!=null && automovil.getMotor()!=null && automovil.getNumeroPlaca()!=null)
		{
			if(automovilDao.findByKey(automovil.getNumeroPlaca())== null)
				this.automovilDao.insert(automovil);
			else
				throw new Exception("El  numero de la placa ya existe en la base de datos");
		}

		else
			throw new Exception("verifique bien los datos");
	}

	/**
	 * este metodo permite eliminar un automovil
	 * @param llave la placa del automovil
	 * @param cedulaV la cedula del vendedor
	 * @throws Exception 
	 */
	@Override
	public void eliminarAutomovil(String llave , String cedulaV)throws Exception 
	{
		// TODO Auto-generated method stub
		Vendedor vendedor= vendedorDao.findByKey(cedulaV);
		Automovil auto =automovilDao.findByKey(llave);
		if (auto!=null)
		{ 
			if(auto.getVendedor().equals(vendedor))
			 automovilDao.remove(auto);
			else
				throw new Exception("actualmente usted no posee permisos para eliminar ese automovil");
		}
		
		else
			throw new Exception("el automovil no existe");
	}
    public List<Automovil>obtenerAutomoviles()
    {
    	List<Automovil>list=automovilDao.getAll();
    	return list;
    }
    
}
